It has become commonplace to connect a host processor to different devices using a plurality of conducting wires referred to as a “bus” that typically complies with well known standards. The devices connected to the bus may include memory/storage devices, communications devices, sensing devices, etc. and these devices may be either fixed or removable. In most situations, some or all of the wires that define the bus are shared amongst any and/or all of the devices that are connected to the bus. Since the devices coupled to the bus share the same conducting wires, each device is typically assigned a unique ID or address on the bus and is configured to respond only to messages that are addressed to that unique ID/address. In this way, multiple devices can share the same conducting wires that form the bus resulting in a substantially reduced bus size than would otherwise be required.
Typically, a master/slave bus protocol is adopted for the bus. Master/slave is a model for a communication protocol in which one device or process has unidirectional control over one or more other devices. In a conventional system, once a master/slave relationship between devices or processes is established, the direction of control is always from the master to the slaves, i.e. a slave cannot initiate a transaction. In some systems a master is elected from a group of eligible devices with the other devices acting in the role of slaves. In conventional systems, data is not transferred directly between slave devices; rather, data is typically passed over the common bus from a source slave storage device to a host controller or other intermediary where the data is temporarily cached before being re-output by the host controller over the common bus and targeted towards a destination slave storage device where the data is then read from the bus and stored.
While conventional systems work well, it is desirable to reduce the host CPU resources required for transferring data between devices as well as to reduce the bus utilization and memory requirements of the host and/or other temporary storage devices.